package designpattern.struct.proxy.dynamic.jdks;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * JDK代理，完成方法的调用
 *
 * @author cuihao
 * @date 2018/3/1
 */
public class DynamicHandler implements InvocationHandler {
    // 被代理对象
    private final Object object;

    public DynamicHandler(Object object) {
        this.object = object;
    }

    /**
     * @param proxy  动态代理生成的对象
     * @param method 原始方法
     * @param args   原始方法的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Long startTime = System.currentTimeMillis();
        System.out.println("开始执行：" + startTime);
        // 执行目标对象的方法
        Object result = method.invoke(object, args);
        System.out.println("花费时间:" + (System.currentTimeMillis() - startTime));
        return result;
    }
}
